<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1></h1>
    <script src="http://unpkg.com/jquery"></script>
    <script>
      /**获取农历 start*/
      function getLunar() {
        // 获取当前年份
        let sxYear = new Date().getFullYear();
        console.log(sxYear);
        let num = sxYear % 12;
        console.log(num);
        // 、、、、、、、、申、、、
        let sxName = "";
        let dzName = "";
        let tgName = "";
        let numTwo = (sxYear - 3) % 10;
        switch (numTwo) {
          case 1:
            tgName = "甲";
            break;
          case 2:
            tgName = "乙";
            break;
          case 3:
            tgName = "丙";
            break;
          case 4:
            tgName = "丁";
            break;
          case 5:
            tgName = "戊";
            break;
          case 6:
            tgName = "己";
            break;
          case 7:
            tgName = "庚";
            break;
          case 8:
            tgName = "辛";
            break;
          case 9:
            tgName = "壬";
            break;
          case 0:
            tgName = "癸";
            break;
        }
        switch (num) {
          case 0:
            sxName = "猴";
            dzName = "申";
            break;
          case 1:
            sxName = "鸡";
            dzName = "酉";
            break;
          case 2:
            sxName = "狗";
            dzName = "戌";
            break;
          case 3:
            sxName = "猪";
            dzName = "亥";
            break;
          case 4:
            sxName = "鼠";
            dzName = "子";
            break;
          case 5:
            sxName = "牛";
            dzName = "丑";
            break;
          case 6:
            sxName = "虎";
            dzName = "寅";
            break;
          case 7:
            sxName = "兔";
            dzName = "卯";
            break;
          case 8:
            sxName = "龙";
            dzName = "辰";
            break;
          case 9:
            sxName = "蛇";
            dzName = "巳";
            break;
          case 10:
            sxName = "马";
            dzName = "午";
            break;
          case 11:
            sxName = "羊";
            dzName = "未";
            break;

          default:
            break;
        }
        console.log(sxName);
        var nyear;
        var nmonth;
        var nday = -1;
        var nwday;
        var nhrs;
        var nmin;
        var nsec;

        var lmonth, lday, lleap; //农历参数

        function Draw() {
          NewTick();

          //显示时间
          var s =
            nyear +
            "年" +
            nmonth +
            "月" +
            nday +
            "日 " +
            "星期" +
            cweekday(nwday) +
            " " +
            shapetime(nhrs, nmin, nsec);
          s += "农历" + lmonth + "月" + lday; //农历
          var lunar_month_day =
            tgName + dzName + sxName + "年" + lmonth + "月" + lday;
          //需要展示在页面地方
          $("h1").text(lunar_month_day);
        }

        function NewTick() {
          noww = new Date();
          if (noww.getDate() != nday) {
            nyear = noww.getFullYear();
            nmonth = noww.getMonth() + 1;
            nwday = noww.getDay();
            nday = noww.getDate();

            getlunar(); //获取农历
          }
          nhrs = noww.getHours();
          nmin = noww.getMinutes();
          nsec = noww.getSeconds();
        }

        //辅助函数
        var hzWeek = new Array("日", "一", "二", "三", "四", "五", "六", "日");
        function cweekday(wday) {
          return hzWeek[wday];
        }
        function shapetime(vhrs, vmin, vsec) {
          if (vsec <= 9) vsec = "0" + vsec;
          if (vmin <= 9) vmin = "0" + vmin;
          if (vhrs <= 9) vhrs = "0" + vhrs;
          return vhrs + ":" + vmin + ":" + vsec;
        }

        //农历函数开始
        var lunarInfo = new Array(
          0x04bd8,
          0x04ae0,
          0x0a570,
          0x054d5,
          0x0d260,
          0x0d950,
          0x16554,
          0x056a0,
          0x09ad0,
          0x055d2,
          0x04ae0,
          0x0a5b6,
          0x0a4d0,
          0x0d250,
          0x1d255,
          0x0b540,
          0x0d6a0,
          0x0ada2,
          0x095b0,
          0x14977,
          0x04970,
          0x0a4b0,
          0x0b4b5,
          0x06a50,
          0x06d40,
          0x1ab54,
          0x02b60,
          0x09570,
          0x052f2,
          0x04970,
          0x06566,
          0x0d4a0,
          0x0ea50,
          0x06e95,
          0x05ad0,
          0x02b60,
          0x186e3,
          0x092e0,
          0x1c8d7,
          0x0c950,
          0x0d4a0,
          0x1d8a6,
          0x0b550,
          0x056a0,
          0x1a5b4,
          0x025d0,
          0x092d0,
          0x0d2b2,
          0x0a950,
          0x0b557,
          0x06ca0,
          0x0b550,
          0x15355,
          0x04da0,
          0x0a5b0,
          0x14573,
          0x052b0,
          0x0a9a8,
          0x0e950,
          0x06aa0,
          0x0aea6,
          0x0ab50,
          0x04b60,
          0x0aae4,
          0x0a570,
          0x05260,
          0x0f263,
          0x0d950,
          0x05b57,
          0x056a0,
          0x096d0,
          0x04dd5,
          0x04ad0,
          0x0a4d0,
          0x0d4d4,
          0x0d250,
          0x0d558,
          0x0b540,
          0x0b6a0,
          0x195a6,
          0x095b0,
          0x049b0,
          0x0a974,
          0x0a4b0,
          0x0b27a,
          0x06a50,
          0x06d40,
          0x0af46,
          0x0ab60,
          0x09570,
          0x04af5,
          0x04970,
          0x064b0,
          0x074a3,
          0x0ea50,
          0x06b58,
          0x05ac0,
          0x0ab60,
          0x096d5,
          0x092e0, //1990
          0x0c960,
          0x0d954,
          0x0d4a0,
          0x0da50,
          0x07552,
          0x056a0,
          0x0abb7,
          0x025d0,
          0x092d0,
          0x0cab5,
          0x0a950,
          0x0b4a0,
          0x0baa4,
          0x0ad50,
          0x055d9,
          0x04ba0,
          0x0a5b0,
          0x15176,
          0x052b0,
          0x0a930,
          0x07954,
          0x06aa0,
          0x0ad50,
          0x05b52,
          0x04b60,
          0x0a6e6,
          0x0a4e0,
          0x0d260,
          0x0ea65,
          0x0d530,
          0x05aa0,
          0x076a3,
          0x096d0,
          0x04bd7,
          0x04ad0,
          0x0a4d0,
          0x1d0b6,
          0x0d250,
          0x0d520,
          0x0dd45,
          0x0b5a0,
          0x056d0,
          0x055b2,
          0x049b0,
          0x0a577,
          0x0a4b0,
          0x0aa50,
          0x1b255,
          0x06d20,
          0x0ada0,
          0x14b63
        );
        function lYearDays(y) {
          var i,
            sum = 348;
          for (i = 0x8000; i > 0x8; i >>= 1)
            sum += lunarInfo[y - 1900] & i ? 1 : 0;
          return sum + leapDays(y);
        }
        function leapDays(y) {
          if (leapMonth(y)) return lunarInfo[y - 1900] & 0x10000 ? 30 : 29;
          else return 0;
        }
        function leapMonth(y) {
          return lunarInfo[y - 1900] & 0xf;
        }
        function monthDays(y, m) {
          return lunarInfo[y - 1900] & (0x10000 >> m) ? 30 : 29;
        }
        function Lunar(y, m, d) {
          var i,
            leap = 0,
            temp = 0;
          var offset = (Date.UTC(y, m, d) - Date.UTC(1900, 0, 31)) / 86400000;
          for (i = 1900; i < 2050 && offset > 0; i++) {
            temp = lYearDays(i);
            offset -= temp;
          }
          if (offset < 0) {
            offset += temp;
            i--;
          }
          this.year = i;
          leap = leapMonth(i);
          this.isLeap = false;
          for (i = 1; i < 13 && offset > 0; i++) {
            if (leap > 0 && i == leap + 1 && this.isLeap == false) {
              --i;
              this.isLeap = true;
              temp = leapDays(this.year);
            } else {
              temp = monthDays(this.year, i);
            }
            if (this.isLeap == true && i == leap + 1) this.isLeap = false;
            offset -= temp;
          }
          if (offset == 0 && leap > 0 && i == leap + 1)
            if (this.isLeap) {
              this.isLeap = false;
            } else {
              this.isLeap = true;
              --i;
            }
          if (offset < 0) {
            offset += temp;
            --i;
          }
          this.month = i;
          this.day = offset + 1;
        }
        var nStr1 = new Array(
          "",
          "一",
          "二",
          "三",
          "四",
          "五",
          "六",
          "七",
          "八",
          "九",
          "十",
          "十一",
          "十二"
        );
        var nStr2 = new Array("初", "十", "廿", "卅", "□");
        function GetcDay(d) {
          var s;
          switch (d) {
            case 10:
              s = "初十";
              break;
            case 20:
              s = "二十";
              break;
            case 30:
              s = "三十";
              break;
            default:
              s = nStr2[Math.floor(d / 10)];
              s += nStr1[d % 10];
              break;
          }
          return s;
        }
        function GetcMon(m) {
          if (m == 1) return "正";
          else return nStr1[m];
        }
        function getlunar() {
          var lObj = new Lunar(nyear, nmonth - 1, nday);
          lmonth = GetcMon(lObj.month);
          lday = GetcDay(lObj.day);
          lleap = lObj.isLeap;
          if (lleap == 1) {
            lmonth = "闰" + lmonth;
          }
        }
        //农历函数结束
        Draw();
      }
      /**获取农历 end*/
      getLunar();
    </script>
  </body>
</html>
